import axios from 'axios'
import { Message } from 'element-ui';
import router from '../router'
import getStorage from '../utils/getStorage'
// 创建实例
const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL + '/',//设置接口请求ip地址
  timeout: 10000,//设置超时时间
  headers: {//设置请求头
    //使用这个application/json请求头会出现向服务器请求两次的情况.浏览器会首先使用 OPTIONS 方法发起一个预请求，
    // 判断接口是否能够正常通讯，如果不能就不会发送真正的请求过来，如果测试通讯正常，则开始真正的请求。
    // 解决方法:全局默认application/x-www-form-urlencoded 在请求时用qs转换数据给后台发送
    "Content-Type": "application/json", //默认请求头为它
    headers: {
      'idconfig': 'error',
      'tokenconfig': 'error',
      "Content-Type": "application/json",
    }

  }
});


//request拦截器
request.interceptors.request.use(config => {
  // // 在请求发出之前进行一些操作
  config.headers.idconfig = getStorage.getAxiosUserId();
  config.headers.tokenconfig = getStorage.getTokenStorage();
  config.headers.compconfig = getStorage.getroleId();
  return config
})



// 响应拦截器
request.interceptors.response.use(res => {
  // 未设置状态码则默认成功状态
  const code = res.data.status || 0
  if (code === 666) {
    Message.error(
      {
        message: res.data.msg,
      }
    )
    return Promise.reject('error')
  } else if (code == 0) {
    Message.success({
      message: res.data.msg,
    })
    return res.data
  } else if (code == 888) {
    getStorage.flushUser();
    Message.error(
      {
        message: '请登录',
      }
    )
    router.replace('/')
    return Promise.reject('error');
  } else {
    return res.data
  }
},
  error => {
    let { message } = error;
    if (message == "Network Error") {
      Message.error(
        {
          message: '系统接口连接异常',
        }
      )
    }
    else if (message.includes("timeout")) {
      Message.error(
        {
          message: '系统接口请求超时',
        }
      )
    }
    else if (message.includes("Request failed with status code")) {
      Message.error(
        {
          message:  "系统接口" + message.substr(message.length - 3) + "异常",
        }
      )
    }
    return Promise.reject(error)
  }
)


export default request;